package com.tbit.main.dao.core;

import com.tbit.main.pojo.KVEntity;
import com.tbit.main.pojo.User;
import com.tbit.main.pojo.VO.UserVO;

import java.util.List;
import java.util.Map;

/**
 * 用户dao
 *
 * @author Leon
 * 2019年11月13日 下午9:22:13
 */
public interface UserDao {
    /**
     * 统计代理商有效免押会员数
     *
     * @param params
     * @return
     */
    Integer getDepositUserCount(Map<String, Object> params);

    /**
     * 统计代理商有效免押会员数
     *
     * @param params
     * @return
     */
    Integer getDepositUserCountByAccountId(Map<String, Object> params);

    /**
     * 统计运营区域批量有效免押会员数
     *
     * @param params
     * @return
     */
    Integer getDepositUserCountByAccountIds(Map<String, Object> params);

    /**
     * 用户总数
     *
     * @param params
     * @return
     */
    Integer getUserCount(Map<String, Object> params);

    /**
     * 代理商集合用户总数
     *
     * @param params
     * @return
     */
    List<Map<String, Object>> getUserCountByAccountIds(Map<String, Object> params);

    /**
     * 根据用户id查询
     *
     * @param userId
     * @return
     */
    User getByUserId(Integer userId);

    /**
     * 根据手机号码查询
     *
     * @param params
     * @return
     */
    User getByPhone(Map<String, Object> params);

    /**
     * 新用户分组统计
     *
     * @param params
     * @return
     */
    List<KVEntity> newUserGroupByDate(Map<String, Object> params);

    /**
     * 查询用户新增
     *
     * @param params
     * @return
     */
    Integer newUser(Map<String, Object> params);

    /**
     * 性别统计
     *
     * @param params
     * @return
     */
    List<KVEntity> groupBySex(Map<String, Object> params);

    /**
     * 年龄段统计
     *
     * @param params
     * @return
     */
    List<KVEntity> groupByAge(Map<String, Object> params);

    /**
     * 获取品牌用户总数
     *
     * @param accountId
     * @return
     */
    Integer getBrandUserCount(Integer accountId);

    /**
     * 获取运营区域id批量用户总数
     *
     * @param map
     * @return
     */
    Integer getBrandUserCountByAccountIds(Map<String, Object> map);

    /**
     * 查询用户总余额,总押金
     *
     * @param accountId
     * @return
     */
    String getUserMoneyCount(Integer accountId);

    /**
     * 查询用户总余额
     *
     * @param map
     * @return
     */
    String getUserMoneyCountByAccountId(Map<String, Object> map);

    /**
     * 押金用户总数和押金金额
     *
     * @param accountId
     * @return
     */
    KVEntity getUserDepositCount(Integer accountId);

    /**
     * 运营区域批量押金用户总数和押金金额
     *
     * @param map
     * @return
     */
    KVEntity getUserDepositCountByAccountId(Map<String, Object> map);

    /**
     * 根据运营区域按天分组
     *
     * @param params
     * @return
     */
    List<Map<String, Object>> getGroupByDay(Map<String, Object> params);

    /**
     * 统计前一天的数据
     *
     * @return
     */
    Map<String, Object> statYesterdayOrder(Map<String, Object> params);

    /**
     * 根据用户id获取运营区域
     *
     * @param userId
     * @return
     */
    Integer getAccountIdByUserId(Integer userId);

    /**
     * 根据身份证号查询
     *
     * @param map
     * @return
     */
    List<User> getAccountIdIdNO(Map<String, Object> map);

    List<User> getByPhones(List<String> list);

    void addBatch(List<User> list);

    List<User> getUserIds(String userIds);
    /**
     * 查询用户详细信息
     *
     */
    List<UserVO> queryPage(Map<String, Object> params);
}